<?php
//TODO rajouter une méthode pour virer toutes les variables de sessions une fois le formulaire validé ! (gain de perf)
class FormulaireElements{
	
	protected $idElement = null;
	protected $listeValidator = null;
	protected $paramsElement = null;
	protected $labelElement = null;
	
	public function __construct($id, $label, $params, $listeValidator = null){
		
		$this->idElement = $id;
		$this->listeValidator = $listeValidator; //TODO verifier qu'un seul type de validator est associé au fe (sinon peut créer des soucis !)
		$this->labelElement = $label;
		$this->paramsElement = $params;
	}

	protected function getValue(){
		
		$valSession = 'value_'.$this->idElement;
		
		if(isset($_SESSION[$valSession])){
			return $_SESSION[$valSession];
		}
		
		return $this->paramsElement['defaultValue'];
	}
	
	//TODO soucis avec mon systeme pour l'ajax, il faut pouvoir appliquer les modifications qui ont été faites en fonction du niveau de strongness apres l'ajax... chaud !
	public function generateJS(){
		if(isset($this->listeValidator)){	
			?>
			$("#<?php echo $this->idElement; ?>").blur(function(event){
				valElement = $(this).val();
				<?php 
				foreach($this->listeValidator as $validator){
					$validator->testJS();
				}
				?>
				
				$.getJSON(
					"<?php echo 'forms/FH_InscriptionUtilisateur_AJAX.php'; ?>",  // le fichier qui recevera la requête
					{"idElementAjax": "<?php echo $this->idElement; ?>", "value": valElement},  // les paramétres
					function(data){
						
						mess = "";
						tailletab = data.length;
						// la fonction qui traitera l'objet re�u
						
						for ( var i=0; i < tailletab; i++){
							if(data[i]['message'] != null){
								mess = mess + data[i]['message'] + "-";
							}
						}

						alert(mess);
				});
				
			});
				
			<?php
		}
	}
	

		
	
	public function setValue($value){
		$valSession = 'value_'.$this->idElement;
		
		$_SESSION[$valSession] = $value;
	}
	
	public function getId(){
		
		return $this->idElement;
	}
	
	public function setId($id){
		
		$this->idElement = $id;
	}
	
	public function getLabel(){
		
		return $this->labelElement;
	}
	
	public function check($value){
		
		$this->setValue($value);
		
		if(! isset($this->listeValidator)){
			return null;
		}
		
		$listNotifications = array();
		$tmpStrongness = null;
		$tmpMessage = null;
		$tmpIsRefuse = null;
		
			
		foreach($this->listeValidator as $validator){
			
			$tmpStrongness = $validator->test($value);
			$tmpMessage = $validator->getMessage($tmpStrongness);
			$tmpIsRefuse = $validator->isRefuse($tmpStrongness);
			
			if(isset($tmpMessage)||isset($tmpStrongness)||isset($tmpIsRefuse)){
				array_push($listNotifications, array('validatorInstance' => get_class($validator), 'strongness' => $tmpStrongness, 'isRefuse' => $tmpIsRefuse, 'message' => $tmpMessage));
			}
			
		}
		
		return $listNotifications;
	}
	
}